
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2004, Perry L. Miller IV
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
///
///  Traits for function arguments.
///
///////////////////////////////////////////////////////////////////////////////

#ifndef _GENERIC_NURBS_LIBRARY_FUNCTION_ARGUMENT_TRAITS_CLASS_H_
#define _GENERIC_NURBS_LIBRARY_FUNCTION_ARGUMENT_TRAITS_CLASS_H_


namespace GN {
namespace Traits {


///////////////////////////////////////////////////////////////////////////////
///
///  Generic class for argument types.
///
///////////////////////////////////////////////////////////////////////////////

template < class T > struct Argument
{
  typedef const T& Type;
};


///////////////////////////////////////////////////////////////////////////////
///
///  Specialization of above template for basic types.
///
///////////////////////////////////////////////////////////////////////////////

template <> struct Argument < long double >
{
  typedef const long double & Type;
};
template <> struct Argument < double >
{
  typedef double Type;
};
template <> struct Argument < float >
{
  typedef float Type;
};


}; // namespace Traits
}; // namespace GN


#endif // _GENERIC_NURBS_LIBRARY_FUNCTION_ARGUMENT_TRAITS_CLASS_H_
